Duplicate Check don`t get it to work

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • shalmaxb
    Senior Member
    • Mar 2015
    • 1606

    Duplicate Check don`t get it to work

    Hi,
    I need a duplicate check for a custom entity. I read all posts about this subject, worked through the docs, but whatever I try, I always get error 500, nothing in the log-file.

    I have a custom entity (BasePlus), where I want to duplicate check the "name" field. The name of the entity is "Werke"

    Here is the code I tried (following the docs):

    Code:
    <?php
    
    namespace Espo\Custom\Classes\DuplicateWhereBuilders;
    
    use Espo\Core\Duplicate\WhereBuilder;
    
    use Espo\ORM\Query\Part\Condition as Cond;
    use Espo\ORM\Query\Part\WhereItem;
    use Espo\ORM\Query\Part\Where\OrGroup;
    use Espo\ORM\Entity;
    
    class Werke implements WhereBuilder
    {
    protected function getDuplicateWhereClause(Entity $entity, $data)
    {
    if (!$entity->get('name')) {
    return false;
    }
    return [
    'name' => $entity->get('name')
    ];
    }
    }
    Help is appreciated, thank you.​
  • esforim
    Active Community Member
    • Jan 2020
    • 2204

    #2
    Did you read this post? It was for v6, I'm not sure if it still working though. I haven't use Properties in a while so I haven't test.

    Hi Can someone let me know how the duplicate check works on Espocrm? Also when i try to import a csv and even the duplicate check is enabled, it imports all the records although some phone numbers and email addresses are in the crm. The duplicate check doesnt seem to be working properly. also how to i add a phone number for

    Comment

    • yuri
      Member
      • Mar 2014
      • 8453

      #3
      Check the webserver error log to see the error.

      Your class does not follow what is in documentation. https://docs.espocrm.com/development/duplicate-check/

      Your class does not implement interface that it declares to implement. It does not have 'build' method. It does not return a proper type. I recommend using IDE.
      If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

      Comment


      • item
        item commented
        Editing a comment
        this post must be a post-it..
        i begin to understand many. Thank you Yuri
    • shalmaxb
      Senior Member
      • Mar 2015
      • 1606

      #4
      Originally posted by espcrm
      Did you read this post? It was for v6, I'm not sure if it still working though. I haven't use Properties in a while so I haven't test.

      https://forum.espocrm.com/forum/gene...8211#post68211
      I read all threads about duplicate-check, but they have all different code and I did not find the reason for e.g. when to code extend and when to implement. In the documentation, which I followed, there is:

      Code:
      class Werke implements WhereBuilder
      In one of the other threads this line writes:

      Code:
      class RealEstateProperty extends \Espo\Modules\RealEstate\Services\RealEstateProperty
      Maybe this is ridiculos for a programmer, which I am not. But for me I do not see any logic, that would lead me to the right solution.

      yuri, in the documentation the class is so:

      Code:
      {
      "duplicateWhereBuilderClassName": "Espo\\Custom\\Classes\\DuplicateWhereBuilders\\Lead"
      }
      I put it so (my entitie`s name is Werke:

      Code:
      {
      "duplicateWhereBuilderClassName": "Espo\\Custom\\Classes\\DuplicateWhereBuilders\\Werke"
      }
      Then I modified the php code only by adding my entity and taking away the and/or condition. I cannot see, where there would be something missing, I followed, what I see in the documentation.

      What I want is to have the "name" field of my custom entity Werke duplicate checked.
      I admit that it might not work, because my skills are not sufficient. My hope was to be able to learn that by documentation and examples, what not did happen.

      Comment

      • yuri
        Member
        • Mar 2014
        • 8453

        #5
        You mixed the old method that is deprecated with the new method. Just follow what is in documentation and ignore what is on the forum that was posted more than 2 years ago. If there's something in the documentation that contradicts something on the forum, ignore the forum. Even new posts may suggest old deprecated methods.
        If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

        Comment

        • yuri
          Member
          • Mar 2014
          • 8453

          #6
          Try re-utilizing the checker class for Company entities. It checks the name and email addresses.

          Code:
          {
              "duplicateWhereBuilderClassName": "Espo\\Classes\\DuplicateWhereBuilders\\Company"
          }​
          Defining classes with custom logic requires some programming knowledge level.
          If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

          Comment

          • yuri
            Member
            • Mar 2014
            • 8453

            #7
            Checking only name (not tested):

            Code:
            <?php
            namespace Espo\Custom\Classes\DuplicateWhereBuilders;
            
            use Espo\Core\Duplicate\WhereBuilder;
            
            use Espo\ORM\Query\Part\Condition as Cond;
            use Espo\ORM\Query\Part\WhereItem;
            use Espo\ORM\Entity;
            
            class YourEntity implements WhereBuilder
            {
                public function build(Entity $entity): ?WhereItem
                {
                    if ($entity->get('name')) {
                        return Cond::equal(
                            Cond::column('name'),
                            $entity->get('name')
                        );
                    }
            
                    return null;
                }
            }
            Last edited by yuri; 03-21-2023, 04:40 PM.
            If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

            Comment

            • shalmaxb
              Senior Member
              • Mar 2015
              • 1606

              #8
              yuri, thank you very much, I appreciate your efforts. But unfortunately this code throws an error:

              [2023-03-21 15:46:48] ERROR: Slim Application Error Type: ParseError Code: 0 Message: syntax error, unexpected token &quot;}&quot; File: /var/www/vhosts/xxxxxxxxxx/custom/Espo/Custom/Classes/DuplicateWhereBuilders/Werke.php Line: 19 Trace: #0

              When I put the code in a php code checker, the same error in line 19 curly bracket appears. Line 19 is before "return null;"

              Comment

              • yuri
                Member
                • Mar 2014
                • 8453

                #9
                It's because the forum added extra characters. You need to remove them.
                If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

                Comment


                • yuri
                  yuri commented
                  Editing a comment
                  I managed to remove them in the post above. Try to copy again.
              • shalmaxb
                Senior Member
                • Mar 2015
                • 1606

                #10
                yuri, yes now it works. I will keep in mind not to copy from the browser. Thank you very much, your great help is appreciated!

                Comment


                • esforim
                  esforim commented
                  Editing a comment
                  Do you know how we can extend it?

                  It say here in docs:

                  // Here you can add more conditions.
              • esforim
                Active Community Member
                • Jan 2020
                • 2204

                #11
                Lucky I put a disclaimer it for v6

                I guess I will give this a try to update considering what is being said above. Hope it easier to do now and I can adopt to new method.

                Here is my code if anyone want to use it:
                Last edited by esforim; 03-22-2023, 07:02 AM.

                Comment


                • esforim
                  esforim commented
                  Editing a comment
                  This is cool: "Duplicate check is performed upon record creation. Optionally, it can be enabled for record update."
              • esforim
                Active Community Member
                • Jan 2020
                • 2204

                #12
                EDIT EDIT: IGNORE EVERYTHING! I figure it out, I didn't see this other 'code' I need to change. This is what happen when you don't code. All seem to be working now! (I think). Just need to try enable on "Upon Update" somewhere now.

                Code:
                class Lead implements WhereBuilder​
                Reposted here: https://forum.espocrm.com/forum/gene...9795#post89795
                Last edited by esforim; 03-22-2023, 07:10 AM.

                Comment


                • shalmaxb
                  shalmaxb commented
                  Editing a comment
                  your filename is RealEstateProperty.php, the from my understanding the class name is RealEstateProperty.
                  Don´t take this for granted, because, what I (or better: Yuri) solved yesterday, I never would have been able to achieve by myself. Still trying to understand the whole thing.

                  And you did read about the copy from forum/browser can insert hidden characters, which make the code invalid.

                  It has to be DuplicateWhereBuilder, no slash
                  Last edited by shalmaxb; 03-22-2023, 07:03 AM.

                • esforim
                  esforim commented
                  Editing a comment
                  shalmaxb I figure it out, and edit the first post. I might move all this in Learning and not cog up your thread... I try find delete button.

                  I use the copy/paste button from the documents, which by right should be no issue and can confirm. Just need to edit 1 more code which all working all!
                  Last edited by esforim; 03-22-2023, 07:11 AM.
              • esforim
                Active Community Member
                • Jan 2020
                • 2204

                #13
                I guess the next question is, how we can modified this part so it show additional information.

                For example I just create a duplicate check for a custom entity call Asset. In this asset I assign a code to each Asset and will be checking duplicated against that.

                In this photo I add a "Car" and I think this is quite universal but all car got a "Plate Number", which I use as the MainCode.

                I create the code here if anyone want to borrow it, it essential just using Yuri code above with a slight change...

                Anyway here is the issue: Be good if we can display additional data as it only showing "Name" at the moment.

                Click image for larger version

Name:	image.png
Views:	243
Size:	11.8 KB
ID:	89797

                Comment

                • esforim
                  Active Community Member
                  • Jan 2020
                  • 2204

                  #14
                  For the duplicatecheck on update here how I did it:

                  Click image for larger version  Name:	image.png Views:	0 Size:	11.5 KB ID:	89799

                  Here is my code online which I hopefully slowly add in my duplicate check that can use feel free to use:

                  Last edited by esforim; 03-22-2023, 07:34 AM. Reason: it is correct. that how you do it!

                  Comment

                  Working...